home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / GRFMOUSE.C < prev    next >
C/C++ Source or Header  |  1992-03-15  |  3KB  |  67 lines

  1. /**************************************************************************
  2.  * 
  3.  *************************************************************************/
  4.  
  5. #include "gemfast.h"
  6.  
  7. #undef graf_mouse   /* undo remapping, we have to call The Real Thing. */
  8.  
  9. #ifndef NULL
  10.   #define NULL 0L
  11. #endif
  12.  
  13. /* 
  14.  * when returning the prior shape, we can't return the ARROW shape as
  15.  * zero, because that looks like a failure of graf_mouse().  instead,
  16.  * we return GRF_MSALTARROW.  when we're asked to set the shape to GRF_MSALTARROW,
  17.  * we translate it back to ARROW before passing it to GEM.
  18.  */
  19.  
  20. /* 
  21.  * GEM starts programs up with BUSYBEE as the initial shape...
  22.  */
  23.  
  24. static int  lastshape = BUSYBEE;
  25. static void *lastform = NULL;
  26.  
  27. int grf_mouse(shape, pform)
  28.     register int  shape;
  29.     register void *pform;
  30. {
  31.     register int retshape;
  32.     
  33.     retshape = lastshape;
  34.     
  35.     if (shape <= USER_DEF) {    /* if it's not just M_ON or M_OFF... */
  36.     
  37.         if (shape == GRF_MSINQUIRE) {       /* if the caller wants inquiry */
  38.             if (pform != NULL) {            /* without change, return the  */
  39.                 *(void **)pform = lastform; /* form pointer (if we were    */
  40.             }                               /* given somewhere to return   */
  41.             return retshape;                /* it to) & return lastshape.  */
  42.             
  43.         } else {
  44.         
  45.             lastshape = (shape == ARROW) ? GRF_MSALTARROW : shape;
  46.             
  47.             if (shape == USER_DEF) {        /* if we're changing to a      */
  48.                 if (pform == NULL) {        /* user-defined shape, and     */
  49.                     pform = lastform;       /* weren't given a pointer to  */
  50.                 } else {                    /* it, restore the last udef   */
  51.                     lastform = pform;       /* shape, else remember this   */
  52.                 }                           /* as the last udef shape.     */
  53.  
  54.             } else if (shape == GRF_MSALTARROW) {/* if we were given GRF_MSALTARROW  */
  55.                 shape = ARROW;              /* to set, change it back to   */
  56.             }                               /* the normal ARROW.           */
  57.         }
  58.     }
  59.     
  60.     if (0 == graf_mouse(shape, pform)) {    /* do it.  if it fails, change */
  61.         retshape = 0;                       /* our return value to indicate*/
  62.     }                                       /* failure.                    */
  63.     
  64.     return retshape;    /* return prior mouse shape. */
  65. }
  66.  
  67.